package com.app.sgd.business.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import com.app.sgd.plugin.JNDIConnector;
import com.app.sgd.util.Constants;
import com.app.sgd.view.vo.ActividadVO;
import com.app.sgd.view.vo.PerfilVO;
import com.app.sgd.view.vo.UsuarioVO;

public class SQLUsuarioDAO {
	private static Logger logger = Logger.getLogger(SQLUsuarioDAO.class);
	
	DataSource ds = null;
	JNDIConnector cn = new JNDIConnector();
	
//	public UsuarioVO obtenerUsuarioLogueado(Usuario usuario) throws Exception {
//		UsuarioVO usuarioVO = new UsuarioVO();
//		ArrayList lstPerfilesEncargatura = new ArrayList();
////		ArrayList lstUsuarioPerfiles = new ArrayList();
//		Connection conn = null;
//		PreparedStatement pre = null;
//		CallableStatement call = null;
//		ResultSet rs = null;
//	    try{
//	    	conn = cn.connect().getConnection();
//	    	
//	    	String sql1 =   " SELECT U.LOGIN_USU as Login                                 " +
//					    	"       , U.CODI_USU as UsuarioId                             " +
//					    	"       , E.CODI_EMP as EmpleadoId                            " +
//					    	"       , E.NOMB_LARGO_EMP as EmpleadoNombre                  " +
//					    	"       , A.CODI_ARE as AreaId                                " +
//					    	"       , A.NOMB_ARE as AreaNombre                            " +
//					    	"       , A.SIG_ARE as AreaSIG                                " +
//					    	"       , H.CODI_PER as Perfil                                " +
//					    	"       , ENC.CODI_ENC as Encargatura                         " +
//					    	"   FROM SEGURIDAD..AREA A                                    " +
//					    	"  INNER JOIN SEGURIDAD..ENCARGATURA ENC                      " +
//					    	"     ON A.CODI_ARE = ENC.CODI_ARE                            " +
//					    	"    AND ENC.ESTA_ENC ='1'                                    " +
//					    	"    AND (ENC.FECH_INI IS NULL OR  ENC.FECH_INI <= GETDATE()) " +
//					    	"    AND (ENC.FECH_FIN IS NULL OR  ENC.FECH_FIN >= GETDATE()) " +   
//					    	"  INNER JOIN SEGURIDAD..USUARIO U                            " +
//					    	"     ON ENC.CODI_USU = U.CODI_USU                            " +
//					    	"    AND U.ESTA_USU = '1'                                     " +
//					    	"  INNER JOIN SEGURIDAD..EMPLEADO E                           " +
//					    	"     ON U.CODI_EMP = E.CODI_EMP                              " +
//					    	"  INNER JOIN SEGURIDAD..ACCESO F                             " +
//					    	"     ON F.CODI_ARE = A.CODI_ARE                              " +
//					    	"    AND F.CODI_USU = U.CODI_USU                              " +
//					    	"    AND F.CODI_ENC = ENC.CODI_ENC                            " +
//					    	"  INNER JOIN SEGURIDAD..ACCESO_PERFIL G                      " +
//					    	"     ON G.CODI_ACC = F.CODI_ACC                              " +
//					    	"  INNER JOIN SEGURIDAD..PERFIL H                             " +
//					    	"     ON H.CODI_PER = G.CODI_PER                              " +
//					    	"  INNER JOIN SEGURIDAD..OPCION_PERFIL O                      " +
//					    	"     ON H.CODI_PER = O.CODI_PER                              " +
//					    	"    AND CODI_OPC ='"+Constants.CODIGO_APP_SGDOC+"'           " +
//					    	"  WHERE U.CODI_USU = ?                                       " +
//					    	"    AND A.CODI_ARE = ?                                       " ;
//	    	
//	    	pre = conn.prepareStatement(sql1);
//	    	pre.setString(1, usuario.getCodigo());
//	    	pre.setString(2, usuario.getArea().getCodigo());
//	    	rs = pre.executeQuery();
//	    	while(rs.next()){
//	    		usuarioVO = new UsuarioVO();
//	    		usuarioVO.setCodigo(usuario.getCodigo());
//	    		usuarioVO.setNombre(rs.getString("EmpleadoNombre"));
//	    		usuarioVO.setLogin(rs.getString("Login"));
//	    		usuarioVO.setCodigoEmpleado(rs.getString("EmpleadoId"));
//	    		usuarioVO.setNombreEmpleado(rs.getString("EmpleadoNombre"));
//	    		Area area = new Area();
//	    		area.setCodigo(rs.getString("AreaId"));
//	    		area.setNombre(rs.getString("AreaNombre"));
//	    		area.setCodigoSIG(rs.getString("AreaSIG"));
//	    		usuarioVO.setArea(area);
//	    		usuarioVO.setFlgLogin(1);
//	    		
//	    		PerfilVO perfilVO = new PerfilVO();
//	    		perfilVO.setCodigo(rs.getString("Perfil"));
//	    		perfilVO.setCodigoEncargatura(rs.getString("Encargatura"));
//	    		lstPerfilesEncargatura.add(perfilVO);
//	    		
////	    		lstUsuarioPerfiles.add(usuarioVO);
//	    	}
//	    	
//	    	String sql = "SELECT CODI_ENC, DESC_ENC, CODI_USU, CODI_ARE " + 
//						 "  from SEGURIDAD..ENCARGATURA " +
//						 " where CODI_USU = ? and ESTA_ENC = '1' " +
//						 " ORDER BY CODI_ENC" ;
//	    	pre = conn.prepareStatement(sql);
//	    	pre.setString(1, usuario.getCodigo());
//	    	rs = pre.executeQuery();
//	    	ArrayList lstPerfiles = new ArrayList();
//	    	while(rs.next()){
//	    		//listado de encargaturas (perfiles)
//	    		PerfilVO perfilVO = new PerfilVO();
//	    		perfilVO.setCodigoEncargatura(rs.getString("CODI_ENC"));
//	    		perfilVO.setNombreEncargatura(rs.getString("DESC_ENC"));
//	    		perfilVO.setCodigo(getCodigoPerfilEncargatura(lstPerfilesEncargatura,perfilVO.getCodigoEncargatura()));
//				perfilVO.setNombre("");
//	    		perfilVO.setLstActividades(obtenerActividadesPerfil(perfilVO,usuarioVO));
//	    		lstPerfiles.add(perfilVO);
//	    	}
//	    	usuarioVO.setLstPerfiles(lstPerfiles);
//        }
//        catch(Exception e)
//        {
//        	logger.error("[STD]: Error en obtenerUsuarioLogueado: " + e.getMessage());
//            e.printStackTrace();
//        }
//        finally
//	    {   
//        	cn.destroy(conn,null,rs,call,pre);
//	    }
//		return usuarioVO;
//	}
	
	public String getCodigoPerfilEncargatura(ArrayList lstPerfilesEncargatura,String codigoEncargatura){
		for(Iterator it=lstPerfilesEncargatura.iterator();it.hasNext();)	{
			PerfilVO perfilVO = (PerfilVO)it.next();
			if(perfilVO.getCodigoEncargatura().equals(codigoEncargatura)){
				return perfilVO.getCodigo();
			}
		}
		return new String();
	}
	
	public ArrayList obtenerActividadesPerfil(PerfilVO perfilVO,UsuarioVO usuarioVO) throws Exception {
		ArrayList lstActividades = new ArrayList();
		Connection conn = null;
		PreparedStatement pre = null;
		CallableStatement call = null;
		ResultSet rs = null;
		try{
			String[] codActividadesPersonal      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0390","0410"};
			String[] codActividadesTodaOfic      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0390","0410"};
			String[] codActividadesTodaSEPS      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0390","0410"};
			String[] codActividadesCeconar       = {"0100","0110","0120","0200","0220","0230","0300","0310","0320","0330","0340","0342","0344","0390","0410"};
			String[] codActividadesTecTramite    = {"0100","0110","0120","0200","0210","0220","0230","0300","0310","0320","0330","0340","0342","0344","0390","0400","0410"};
			String[] codActividadesAdministrador = {"0100","0110","0120","0200","0210","0220","0230","0300","0310","0320","0330","0340","0342","0344","0390","0400","0410","0490"};
			
//			String[] codActividadesPersonal      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0410"};
//			String[] codActividadesTodaOfic      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0410"};
//			String[] codActividadesTodaSEPS      = {"0100","0110","0120","0200","0230","0300","0310","0320","0330","0340","0342","0344","0410"};
//			String[] codActividadesCeconar       = {"0100","0110","0120","0200","0220","0230","0300","0310","0320","0330","0340","0342","0344","0410"};
//			String[] codActividadesTecTramite    = {"0100","0110","0120","0200","0210","0220","0230","0300","0310","0320","0330","0340","0342","0344","0410"};
//			String[] codActividadesAdministrador = {"0100","0110","0120","0200","0210","0220","0230","0300","0310","0320","0330","0340","0342","0344","0400","0410"};
			
			if(Constants.PRIVILEGIO_ADMINISTRADOR.indexOf(perfilVO.getCodigo())>-1){
				for(int i=0;i<codActividadesAdministrador.length;i++){
					ActividadVO actividadVO = new ActividadVO();
					actividadVO.setCodigo(codActividadesAdministrador[i]);
					actividadVO.setNombre("Actividad "+codActividadesAdministrador[i]);
					lstActividades.add(actividadVO);
				}
			}
			else
				if(Constants.PRIVILEGIO_TECNICO.indexOf(perfilVO.getCodigo())>-1){
					for(int i=0;i<codActividadesTecTramite.length;i++){
						ActividadVO actividadVO = new ActividadVO();
						actividadVO.setCodigo(codActividadesTecTramite[i]);
						actividadVO.setNombre("Actividad "+codActividadesTecTramite[i]);
						lstActividades.add(actividadVO);
					}
				}
				else
					if(Constants.PRIVILEGIO_JEFE_UNIDAD_ORGANICA.indexOf(perfilVO.getCodigo())>-1
						|| Constants.PRIVILEGIO_AUDITOR_UNIDAD_ORGANICA.indexOf(perfilVO.getCodigo())>-1){
						if(!usuarioVO.getArea().getCodigo().equals(Constants.VALOR_OFICINA_CECONAR)){
							for(int i=0;i<codActividadesTodaOfic.length;i++){
								ActividadVO actividadVO = new ActividadVO();
								actividadVO.setCodigo(codActividadesTodaOfic[i]);
								actividadVO.setNombre("Actividad "+codActividadesTodaOfic[i]);
								lstActividades.add(actividadVO);
							}
						}
						else{
							for(int i=0;i<codActividadesCeconar.length;i++){
								ActividadVO actividadVO = new ActividadVO();
								actividadVO.setCodigo(codActividadesCeconar[i]);
								actividadVO.setNombre("Actividad "+codActividadesCeconar[i]);
								lstActividades.add(actividadVO);
							}
						}
					}
					else
						if(Constants.PRIVILEGIO_GLOBAL.indexOf(perfilVO.getCodigo())>-1){
							if(!usuarioVO.getArea().getCodigo().equals(Constants.VALOR_OFICINA_CECONAR)){
								for(int i=0;i<codActividadesTodaSEPS.length;i++){
									ActividadVO actividadVO = new ActividadVO();
									actividadVO.setCodigo(codActividadesTodaSEPS[i]);
									actividadVO.setNombre("Actividad "+codActividadesTodaSEPS[i]);
									lstActividades.add(actividadVO);
								}
							}
							else{
								for(int i=0;i<codActividadesCeconar.length;i++){
									ActividadVO actividadVO = new ActividadVO();
									actividadVO.setCodigo(codActividadesCeconar[i]);
									actividadVO.setNombre("Actividad "+codActividadesCeconar[i]);
									lstActividades.add(actividadVO);
								}
							}
						}
						else
							if(Constants.PRIVILEGIO_PERSONAL.indexOf(perfilVO.getCodigo())>-1){
								if(!usuarioVO.getArea().getCodigo().equals(Constants.VALOR_OFICINA_CECONAR)){
									for(int i=0;i<codActividadesPersonal.length;i++){
										ActividadVO actividadVO = new ActividadVO();
										actividadVO.setCodigo(codActividadesPersonal[i]);
										actividadVO.setNombre("Actividad "+codActividadesPersonal[i]);
										lstActividades.add(actividadVO);
									}
								}
								else{
									for(int i=0;i<codActividadesCeconar.length;i++){
										ActividadVO actividadVO = new ActividadVO();
										actividadVO.setCodigo(codActividadesCeconar[i]);
										actividadVO.setNombre("Actividad "+codActividadesCeconar[i]);
										lstActividades.add(actividadVO);
									}
								}
							}
			
		}
		catch(Exception e)
        {
        	logger.error("[STD]: Error en obtenerActividadesPerfil: " + e.getMessage());
            e.printStackTrace();
        }
        finally
	    {   
        	cn.destroy(conn,null,rs,call,pre);
	    }
		return lstActividades;
	}
}
